﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace KPWeb.Data
{
    public class DyzuryK
    {
          public static vKP_DokumentyPlanyDyzurow[] GetPlanyDyzurow(int jednostkaID, short year)
            {
                using (DBContainer db = new DBContainer())
                {

                    return (from wiz in db.vKP_DokumentyPlanyDyzurow.Where(a => a.JednostkaID == jednostkaID && a.OdData.Year==year && a.PlanyIDRezerwa!=null).OrderByDescending(a => a.OdData)
                            select wiz).ToArray();
                }
            }
          public static vKP_DokumentyPlanyDyzurow[] GetPlanyDyzurowAktywne(int jednostkaID, short year)
          {
              DateTime dN = DateTime.Now.Date;
              using (DBContainer db = new DBContainer())
              {
                return (from wiz in db.vKP_DokumentyPlanyDyzurow.Where(a => a.JednostkaID == jednostkaID
                      && a.OdData.Year == year && a.Stan == 0 && a.PlanyIDRezerwa != null && 
                      dN >= a.WypelnianieOdData && dN <= a.WypelnianieDoData).OrderByDescending(a => a.OdData)
                          select wiz).ToArray();
              }
          }
          public static IEnumerable<vLex_TypDyzuru> GetListaTypDyzuru()
          {
              using (DBContainer db = new DBContainer())
              {
                  return (db.vLex_TypDyzuru.ToArray());
              }
          }

          public static int UpdatePlanyDyzurow(int planyDyzurowID, byte stan1, byte stan2, int loginID)
          {

              using (DBContainer db = new DBContainer())
              {
                  try
                  {
                      var wiz = db.KP_DokumentyPlanyDyzurow.Where(a => a.PlanyDyzurowID == planyDyzurowID && a.Stan == stan1).Single();

                      KP_DokumentyPlanyDyzurow e = new KP_DokumentyPlanyDyzurow();
                      wiz.Stan = stan2;
                      wiz.OsobaID = loginID;
                      db.SaveChanges();
                      return 0;


                  }
                  catch (Exception e)
                  {
                      return -4;
                  }

              }
          }
          public static int UpdateWypelnianieDoPlanyDyzurow(int planyDyzurowID, DateTime wypelnianieDoData,  int loginID)
          {

              using (DBContainer db = new DBContainer())
              {
                  try
                  {
                      var wiz = db.KP_DokumentyPlanyDyzurow.Where(a => a.PlanyDyzurowID == planyDyzurowID && a.Stan == 0).Single();

                      KP_DokumentyPlanyDyzurow e = new KP_DokumentyPlanyDyzurow();
                      wiz.WypelnianieDoData = wypelnianieDoData;
                      wiz.OsobaID = loginID;
                      db.SaveChanges();
                      return 0;
             }
                  catch (Exception e)
                  {
                      return -4;
                  }

              }
          }
            public static int InsertPlanyDyzurow(int typDyzuruID,string opis, DateTime odData, DateTime doData,
                   int jednostkaID, DateTime wypelnianieOdData, DateTime wypelnianieDoData, int osobaID)
       
            //-2 błąd zapisu
            //ID utworzonego rekordu
            {

                using (DBContainer db = new DBContainer())
                {
                    try
                    {   //Rezerwa
                        KP_DokumentyPlanyDyzurow e = new KP_DokumentyPlanyDyzurow();
                        e.TypDyzuruID = (byte)typDyzuruID;
                        e.Opis = opis;
                        e.OdData = odData;
                        e.DoData = doData;
                        e.JednostkaID = jednostkaID;
                        e.WypelnianieOdData = wypelnianieOdData;
                        e.WypelnianieDoData = wypelnianieDoData;
                        e.DataUtworzenia = DateTime.Now;
                        e.Stan = 0;
                        e.OsobaID = osobaID;
                        e.active = "t";
                        e.PlanyIDRezerwa = null;
                        db.KP_DokumentyPlanyDyzurow.AddObject(e);
                        //  int a= db.SaveChanges();
                        db.SaveChanges();

                    //    return e.PlanyDyzurowID;
                        int iID = e.PlanyDyzurowID;

                    //glówne
                        KP_DokumentyPlanyDyzurow e1 = new KP_DokumentyPlanyDyzurow();
                        e1.TypDyzuruID = (byte)typDyzuruID;
                        e1.Opis = opis;
                        e1.OdData = odData;
                        e1.DoData = doData;
                        e1.JednostkaID = jednostkaID;
                        e1.WypelnianieOdData = wypelnianieOdData;
                        e1.WypelnianieDoData = wypelnianieDoData;
                        e1.DataUtworzenia = DateTime.Now;
                        e1.Stan = 0;
                        e1.OsobaID = osobaID;
                        e1.active = "t";
                        e1.PlanyIDRezerwa = iID;
                        db.KP_DokumentyPlanyDyzurow.AddObject(e1);
                        //  int a= db.SaveChanges();
                        db.SaveChanges();

                        return 0;
                    }
                    catch (Exception e)
                    {
                        return -2;
                    }

                }
            }

            public static int DeletePlanyDyzurow(int planyDyzurowID)
            {
                //3 błąd operacji kasowania
                using (DBContainer db = new DBContainer())
                {
                    try
                    //{
                    //    db.KP_DokumentyPlanyDyzurow.DeleteObject(db.KP_DokumentyPlanyDyzurow.Where
                    //              (a => a.PlanyDyzurowID == planyDyzurowID).Single());
                    //    db.SaveChanges();
                    //    return 0;
                    //}
                    { 
                      var wiz = db.KP_DokumentyPlanyDyzurow.Where(a => a.PlanyDyzurowID == planyDyzurowID && a.Stan == 0 ).Single();

                      KP_DokumentyPlanyDyzurow e = new KP_DokumentyPlanyDyzurow();
                      wiz.active="f";
                      db.SaveChanges();
                      return 0;


                  }
                    catch (Exception e)
                    {
                        return -3;
                    }


                }
            }


            public static int DeleteOsobyDyzury(int osobaID, short year, short month)
            {
                using (DBContainer db = new DBContainer())
                {
                    try
                    {
                            var items = db.KP_Dyzury.Where(a => a.OsobaID == osobaID && a.Date.Year==year && a.Date.Month==month);
                            foreach (KP_Dyzury item in items)
                            {
                                db.KP_Dyzury.DeleteObject(item);

                            }
                            db.SaveChanges();
                    
                        return 0;
                    }
                    catch (Exception e)
                    {
                        return 1;
                    }


                }
            }
            public static int InsertOsobyDyzury(int dokumentID,int osobaID, DateTime data,Byte typ)
            {
                using (DBContainer db = new DBContainer())
                {
                    try
                    {
                            KP_Dyzury e = new KP_Dyzury();
                            e.DokumentID = dokumentID;
                            e.OsobaID = osobaID;
                            e.Date = data;
                            e.Year = 2013;
                            e.active = "t";
                            db.KP_Dyzury.AddObject(e);
                            db.SaveChanges();
                        return 0;
                    }
                    catch (Exception e)
                    {
                        return 1;
                    }

                }
            }
            public static IEnumerable<vKP_Dyzury> GetDyzuryDlaOsoby(int osobaID, int dokumentID)
            {
                using (DBContainer db = new DBContainer())
                {
                    // db.ContextOptions.LazyLoadingEnabled = false;

                    return (db.vKP_Dyzury.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID ).ToArray());
                }
            }
            public static IEnumerable<vKP_Dyzury> GetDyzuryDlaJednostkiBezOsoby(int dokumentID, int osobaID)
            {
                using (DBContainer db = new DBContainer())
                {
                    // db.ContextOptions.LazyLoadingEnabled = false;

                    return (db.vKP_Dyzury.Where(a => a.DokumentID == dokumentID && a.OsobaID != osobaID).ToArray());
                }
            }

            public static IEnumerable<vKP_Dyzuryosoby> GetListaOsobDyzury(int jednostkaID,int dokumentID)
            {
                using (DBContainer db = new DBContainer())
                {

                    //.OrderBy(a => a.NumerStrony).OrderBy(a => a.PozycjaNaStronie).OrderBy(a => a.NazwiskoImie)
                    return (db.vKP_Dyzuryosoby.Where(a => a.DokumentID == dokumentID && a.JednostkaID==jednostkaID).ToArray());
                }
            }
            public static Boolean CzyMaDyzur(int osobaID,int dokumentID, DateTime data)
            {
                using (DBContainer db = new DBContainer())
                {

                    return (db.vKP_Dyzury.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID
                         && a.Date==data).Count()>0);
                }
            }

            public static int PobierzGlowneDyzurDokumentID(int jednostkaID, DateTime data)
            {
                using (DBContainer db = new DBContainer())
                {
                    IEnumerable<vKP_DokumentyPlanyDyzurow> qTemp = db.vKP_DokumentyPlanyDyzurow.Where(a => a.JednostkaID == jednostkaID && a.OdData == data && a.PlanyIDRezerwa != null);

                    return (qTemp.Count()>0 ?qTemp.Single().PlanyDyzurowID:0 );
                
                }
            }
        }
   }